home *** CD-ROM | disk | FTP | other *** search
- /*
- Computational engine, setup and DHTML graphics:
- copyright (c) Adrian R. Ashford, 9th January 2006
-
- JavaScript(s) used with permission by BBC Sky at Night magazine.
-
- DHTML date & time validation scripts:
- Sandeep Tamhankar
- stamhankar@hotmail.com
- http://javascript.internet.com
- */
-
- x_origin = 318;
- y_origin = 134;
- scale_factor = 12;
- o_x = 1;
- o_y = 1;
-
- function setup()
- {
- var nowdate = new Date();
- var utc_day = nowdate.getUTCDate();
- var utc_month = nowdate.getUTCMonth() + 1;
- var utc_year = nowdate.getUTCFullYear();
- zone = nowdate.getTimezoneOffset() / 1440;
- var utc_hours = nowdate.getUTCHours();
- var utc_mins = nowdate.getUTCMinutes();
- var utc_secs = nowdate.getUTCSeconds();
- utc_mins += utc_secs / 60.0;
- utc_mins = Math.floor((utc_mins + 0.5));
-
- if (utc_mins > 59) utc_mins = 59;
-
- //document.redspot.date_txt.value = utc_day + "/" + utc_month + "/" + utc_year;
- //document.redspot.ut_h_m.value = utc_hours + ":" + utc_mins
-
- document.redspot.m1.value = doubleDigit(utc_day);
- document.redspot.m2.value = doubleDigit(utc_month);
- document.redspot.m3.value = utc_year;
- document.redspot.m4.value = doubleDigit(utc_hours);
- document.redspot.m5.value = doubleDigit(utc_mins);
-
- jupiter(0,0);
- }
-
- function doubleDigit(iNum){
- if(iNum < 10)
- return '0' + iNum;
- return iNum;
- }
-
- function proper_ang(big)
- {
- with (Math)
- {
- var tmp = 0;
- if (big > 0)
- {
- tmp = big / 360.0;
- tmp = (tmp - floor(tmp)) * 360.0;
- }
- else
- {
- tmp = ceil(abs(big / 360.0));
- tmp = big + tmp * 360.0;
- }
- }
- return tmp;
- }
-
- function round_10(num)
- {
- return Math.floor((num + 0.05) * 10) / 10;
- }
-
- function isValidDate()
- {
- dateStr = document.redspot.m1.value+ "/" + document.redspot.m2.value +"/"+ document.redspot.m3.value;
- timeStr = document.redspot.m4.value +":"+ document.redspot.m5.value;
-
- if (IsValidTime(timeStr) == true)
- {
- var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
- var matchArray = dateStr.match(datePat);
- if (matchArray == null) {
- alert("Date is not in a valid format.")
- return false;
- }
- var month = matchArray[3];
- var day = matchArray[1];
- var year = matchArray[4];
- if (month < 1 || month > 12) {
- alert("Month must be between 1 and 12.");
- return false;
- }
- if (year < 2005 || year > 2015) {
- alert("Year must be between 2005 and 2015.");
- return false;
- }
- if (day < 1 || day > 31) {
- alert("Day must be between 1 and 31.");
- return false;
- }
- if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
- alert("Month " + month + " doesn't have 31 days!")
- return false
- }
- if (month == 2) {
- var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
- if (day > 29 || (day == 29 && !isleap))
- {
- alert("February " + year + " doesn't have " + day + " days!");
- return false;
- }
- }
- if (month < 10 && month.length == 1) month = "0" + month;
- if (day < 10 && day.length == 1) day = "0" + day;
-
- document.redspot.m1.value = day;
- document.redspot.m2.value = month;
- document.redspot.m3.value = year;
- var dt_str = day +"/"+ month + "/" + year;
- if ((dt_str.substring(2,3) != "/") || (dt_str.substring(5,6) != "/"))
- {
- alert ("Date is not in a valid format.");
- return false;
- }
- jupiter(0,0);
- return true;
- }
- else
- {
- return false;
- }
- }
-
- function IsValidTime(timeStr)
- {
- var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
- var matchArray = timeStr.match(timePat);
- if (matchArray == null)
- {
- alert("Time is not in a valid format.");
- return false;
- }
- var hour = matchArray[1];
- var minute = matchArray[2];
- if (hour < 0 || hour > 23)
- {
- alert("Hour must be between 0 and 23.");
- return false;
- }
- if (minute < 0 || minute > 59)
- {
- alert ("Minute must be between 0 and 59.");
- return false;
- }
- document.redspot.m4.value = hour;
- document.redspot.m5.value = minute;
- var tm_str =hour + ":" + minute;
- if ((tm_str.substring(2,3) != ":") && (dt_str.length != 5))
- {
- alert ("Time is not in a valid format.");
- return false;
- }
- return true;
- }
-
- function isBinocular()
- {
- o_x = 1;
- o_y = 1;
- jupiter(0,0);
- return true;
- }
-
- function isReflector()
- {
- o_x = -1;
- o_y = -1;
- jupiter(0,0);
- return true;
- }
-
- function isRefractor()
- {
- o_x = -1;
- o_y = 1;
- jupiter(0,0);
- return true;
- }
-
- /*
- function time_change(tmp)
- {
- if (isValidDate(document.redspot.date_txt.value) == true)
- {
- var jd_temp, zz, ff, alpha, aa, bb, cc, dd, ee;
- var calendar_day, calendar_month, calendar_year;
- var int_day, hours, minutes;
-
- var tm_as_str, ut_hrs, ut_mns, frac_day;
- var jd = julian_date();
-
- ut_hrs = document.redspot.m4.value
- ut_mns = document.redspot.m5.value
- frac_day = ut_hrs / 24.0 + ut_mns / 1440.0;
-
- with (Math) {
-
- jd_temp = jd + frac_day + tmp / 24.0 + 0.5;
-
- zz = floor(jd_temp);
- ff = jd_temp - zz;
- alpha = floor((zz - 1867216.25) / 36524.25);
- aa = zz + 1 + alpha - floor(alpha / 4);
- bb = aa + 1524;
- cc = floor((bb - 122.1) / 365.25);
- dd = floor(365.25 * cc);
- ee = floor((bb - dd) / 30.6001);
- calendar_day = bb - dd - floor(30.6001 * ee) + ff;
- calendar_month = ee;
- if (ee < 13.5) calendar_month = ee - 1;
- if (ee > 13.5) calendar_month = ee - 13;
- calendar_year = cc;
- if (calendar_month > 2.5) calendar_year = cc - 4716;
- if (calendar_month < 2.5) calendar_year = cc - 4715;
- int_day = floor(calendar_day);
- hours = (calendar_day - int_day) * 24;
- minutes = floor((hours - floor(hours)) * 60 + 0.5);
- hours = floor(hours);
- if (minutes > 59)
- {minutes = 0; hours = hours + 1;}
- if (calendar_month < 10) calendar_month = "0" + calendar_month;
- if (int_day < 10) int_day = "0" + int_day;
- if (hours < 10) hours = "0" + floor(hours);
- if (minutes < 10) minutes = "0" + minutes;
- }
- jupiter();
- return true;
- }
- else
- {
- return false;
- }
- }
- */
- function julian_date()
- {
- var dt_as_str, mm, dd, yy;
- var yyy, mmm, a, b;
-
- mm = Number(document.redspot.m2.value);
- dd = Number(document.redspot.m1.value);
- yy = Number(document.redspot.m3.value);
-
- with (Math) {
- var yyy=yy;
- var mmm=mm;
- if (mm < 3)
- {
- yyy = yy - 1;
- mmm = mm + 12;
- }
- a = floor(yyy/100);
- b = 2 - a + floor(a/4);
-
- return floor(365.25*yyy) + floor(30.6001*(mmm+1)) + dd + 1720994.5 + b;
- }
- }
-
- function jupiter(oMenID, iVal)
- {
- /*document.redspot.eval(oMenID).value = doubleDigit(Number(document.redspot.eval(oMenID).value) + iVal)*/
- switch(oMenID){
- case 'm1':
- document.redspot.m1.value = doubleDigit(Number(document.redspot.m1.value) + iVal);
- break;
- case 'm2':
- document.redspot.m2.value = doubleDigit(Number(document.redspot.m2.value) + iVal);
- break;
- case 'm3':
- document.redspot.m3.value = doubleDigit(Number(document.redspot.m3.value) + iVal);
- break;
- case 'm4':
- document.redspot.m4.value = doubleDigit(Number(document.redspot.m4.value) + iVal);
- break;
- case 'm5':
- document.redspot.m5.value = doubleDigit(Number(document.redspot.m5.value) + iVal);
- break;
- }
-
- var i,trans,io_layer,europa_layer,ganymede_layer,callisto_layer;
- var tm_as_str, ut_hrs, ut_mns, frac_day;
- var moon_separation, shadow_separation;
- var factor = 1.071374;
-
- var jd = julian_date();
-
- ut_hrs = document.redspot.m4.value
- ut_mns = document.redspot.m5.value
- frac_day = ut_hrs / 24.0 + ut_mns / 1440.0;
-
- with (Math) {
-
- var RAD = 180.0/PI;
-
- var day_start = jd + 1.1 / 1440 - 2451545.0;
- var days = day_start + frac_day;
-
- var V = proper_ang(172.74 + 0.00111588 * days);
- V = 0.329 * sin(V / RAD);
- var M = proper_ang(357.529 + 0.9856003 * days) / RAD;
- var N = proper_ang(20.02 + 0.0830853 * days + V) / RAD;
- var J = proper_ang(66.115 + 0.9025179 * days - V);
- var A = 1.915 * sin(M) + 0.02 * sin(2 * M);
- var B = 5.555 * sin(N) + 0.168 * sin(2 * N);
- var K = (J + A - B) / RAD;
- var R = 1.00014 - 0.01671 * cos(M) - 0.00014 * cos(2 * M);
- var r = 5.20872 - 0.25208 * cos(N) - 0.00611 * cos(2 * N);
- var e_to_j = sqrt(pow(r,2) + pow(R,2) - 2 * r * R * cos(K));
- document.redspot.jupiter_dist.value = floor((e_to_j + 0.005) * 100.0) / 100.0;
-
- var ang_jove = 0.0009543 / e_to_j * RAD * 30.0;
- document.redspot.jupiter_size.value = round_10(ang_jove * 120.0);
- var pha = asin(R / e_to_j * sin(K));
- var lambda = proper_ang(34.35 + 0.083091 * days + V + B);
- var D_s = 3.12 * sin ((lambda + 42.8) / RAD);
- var D_e = D_s - 2.22 * sin(pha) * cos((lambda + 22) / RAD) - 1.3 * (r - e_to_j) / e_to_j * sin((lambda - 100.5) / RAD);
- var diff = sin((D_e - D_s) / RAD);
- D_e = sin(D_e / RAD);
- D_s = sin(D_s / RAD);
- pha = pha * RAD;
- var m_txt = new Array (4);
- var moons_x = new Array (4);
- var moons_y = new Array (4);
- var shadow_x = new Array (4);
- var shadow_y = new Array (4);
- var moon_shadow_x = new Array (4);
- var moon_shadow_y = new Array (4);
- var u = new Array (4);
- var u1_u = proper_ang(163.8069 + 203.4058646 * (days - e_to_j/173) + pha - B);
- var u2_u = proper_ang(358.414 + 101.2916335 * (days - e_to_j/173) + pha - B);
- var u3_u = proper_ang(5.7176 + 50.234518 * (days - e_to_j/173) + pha - B);
- var u4_u = proper_ang(224.8092 + 21.48798 * (days - e_to_j/173) + pha - B);
- var G = proper_ang(331.18 + 50.310482 * (days - e_to_j/173)) / RAD;
- var H = proper_ang(87.45 + 21.569231 * (days - e_to_j/173)) / RAD;
- var sh_factor_x = sin(pha / RAD);
- var sh_factor_y = cos(pha / RAD);
- u[0] = (u1_u + 0.473 * sin(2 * (u1_u - u2_u) / RAD)) / RAD;
- u[1] = (u2_u + 1.065 * sin(2 * (u2_u - u3_u) / RAD)) / RAD;
- u[2] = (u3_u + 0.165 * sin(G)) / RAD;
- u[3] = (u4_u + 0.843 * sin(H)) / RAD;
- var r1 = 5.9057 - 0.0244 * cos(2 * (u1_u - u2_u) / RAD);
- var r2 = 9.3966 - 0.0882 * cos(2 * (u2_u - u3_u) / RAD);
- var r3 = 14.9883 - 0.0216 * cos(G);
- var r4 = 26.3627 - 0.1939 * cos(H);
-
- moons_x[0] = r1 * sin(u[0]);
- moons_x[1] = r2 * sin(u[1]);
- moons_x[2] = r3 * sin(u[2]);
- moons_x[3] = r4 * sin(u[3]);
- moons_y[0] = -(r1 * cos(u[0]) * D_e) * factor;
- moons_y[1] = -(r2 * cos(u[1]) * D_e) * factor;
- moons_y[2] = -(r3 * cos(u[2]) * D_e) * factor;
- moons_y[3] = -(r4 * cos(u[3]) * D_e) * factor;
- shadow_x[0] = -(r1 * sh_factor_x);
- shadow_x[1] = -(r2 * sh_factor_x);
- shadow_x[2] = -(r3 * sh_factor_x);
- shadow_x[3] = -(r4 * sh_factor_x);
- shadow_y[0] = r1 * sh_factor_y * diff * factor;
- shadow_y[1] = r2 * sh_factor_y * diff * factor;
- shadow_y[2] = r3 * sh_factor_y * diff * factor;
- shadow_y[3] = r4 * sh_factor_y * diff * factor;
- moon_shadow_x[0] = moons_x[0] + shadow_x[0];
- moon_shadow_y[0] = moons_y[0] + shadow_y[0];
- moon_shadow_x[1] = moons_x[1] + shadow_x[1];
- moon_shadow_y[1] = moons_y[1] + shadow_y[1];
- moon_shadow_x[2] = moons_x[2] + shadow_x[2];
- moon_shadow_y[2] = moons_y[2] + shadow_y[2];
- moon_shadow_x[3] = moons_x[3] + shadow_x[3];
- moon_shadow_y[3] = moons_y[3] + shadow_y[3];
-
- var io_x = x_origin + moons_x[0] * scale_factor * o_x;
- var io_y = y_origin - moons_y[0] * scale_factor * o_y;
- var europa_x = x_origin + moons_x[1] * scale_factor * o_x;
- var europa_y = y_origin - moons_y[1] * scale_factor * o_y;
- var ganymede_x = x_origin + moons_x[2] * scale_factor * o_x;
- var ganymede_y = y_origin - moons_y[2] * scale_factor * o_y;
- var callisto_x = x_origin + moons_x[3] * scale_factor * o_x;
- var callisto_y = y_origin - moons_y[3] * scale_factor * o_y;
-
- var io_shadow_x = x_origin + moon_shadow_x[0] * scale_factor * o_x;
- var io_shadow_y = y_origin - moon_shadow_y[0] * scale_factor * o_y;
- var europa_shadow_x = x_origin + moon_shadow_x[1] * scale_factor * o_x;
- var europa_shadow_y = y_origin - moon_shadow_y[1] * scale_factor * o_y;
- var ganymede_shadow_x = x_origin + moon_shadow_x[2] * scale_factor * o_x;
- var ganymede_shadow_y = y_origin - moon_shadow_y[2] * scale_factor * o_y;
- var callisto_shadow_x = x_origin + moon_shadow_x[3] * scale_factor * o_x;
- var callisto_shadow_y = y_origin - moon_shadow_y[3] * scale_factor * o_y;
-
- io_layer = 12;
- europa_layer = 13;
- ganymede_layer = 14;
- callisto_layer = 15;
-
- if (1.571 < u[0] && u[0] < 4.712) io_layer = 9;
- if (1.571 < u[1] && u[1] < 4.712) europa_layer = 7;
- if (1.571 < u[2] && u[2] < 4.712) ganymede_layer = 5;
- if (1.571 < u[3] && u[3] < 4.712) callisto_layer = 3;
-
- for (i=0; i<4; i++)
- {
- m_txt[i] = " lies " + abs(round_10(moons_x[i] * ang_jove)) + " arcmin ";
- if (moons_x[i] > 0)
- {m_txt[i] = m_txt[i] + "west";}
- else
- {m_txt[i] = m_txt[i] + "east";}
- m_txt[i] = m_txt[i] + " and " + abs(floor(moons_y[i] * ang_jove * 60.0 + 0.5)) + " arcsec ";
- if (moons_y[i] > 0)
- {m_txt[i] = m_txt[i] + "north";}
- else
- {m_txt[i] = m_txt[i] + "south";}
- m_txt[i] = m_txt[i] + " of Jupiter's centre.";
-
- shadow_separation = sqrt(pow((moons_x[i] - shadow_x[i]),2) + pow((moons_y[i] - shadow_y[i]),2));
- moon_separation = sqrt(pow(moons_x[i],2) + pow(moons_y[i],2));
- moon_shadow_separation = sqrt(pow(moon_shadow_x[i],2) + pow(moon_shadow_y[i],2));
-
- if (shadow_separation < 1 && (u[i] > 1.58 && u[i] < 4.71))
- {
- m_txt[i] = " is currently in Jupiter's shadow.";
- if (i == 0) io_layer = 1;
- if (i == 1) europa_layer = 1;
- if (i == 2) ganymede_layer = 1;
- if (i == 3) callisto_layer = 1;
- }
-
- if (moon_separation < 1 && (u[i] > 2.79 && u[i] < 3.49))
- m_txt[i] = " is currently occulted by Jupiter.";
- if (moon_separation < 1 && (u[i] > 5.93 || u[i] < 0.35))
- m_txt[i] = " is currently transiting Jupiter.";
-
- if (moon_shadow_separation < 1 && (u[i] > 5.23 || u[i] < 1.04))
- m_txt[i] = " : SHADOW TRANSIT IN PROGRESS!";
- }
-
- document.getElementById('io').style.left = io_x;
- document.getElementById('io').style.top = io_y;
- document.getElementById('io').style.zIndex = io_layer;
-
- document.getElementById('europa').style.left = europa_x;
- document.getElementById('europa').style.top = europa_y;
- document.getElementById('europa').style.zIndex = europa_layer;
-
- document.getElementById('ganymede').style.left = ganymede_x;
- document.getElementById('ganymede').style.top = ganymede_y;
- document.getElementById('ganymede').style.zIndex = ganymede_layer;
-
- document.getElementById('callisto').style.left = callisto_x;
- document.getElementById('callisto').style.top = callisto_y;
- document.getElementById('callisto').style.zIndex = callisto_layer;
-
- document.redspot.x1.value = m_txt[0];
- document.redspot.x2.value = m_txt[1];
- document.redspot.x3.value = m_txt[2];
- document.redspot.x4.value = m_txt[3];
-
- var System_I = proper_ang(210.98 + 877.8169088 * (day_start - e_to_j/173) + pha - B);
- var System_II = proper_ang(187.23 + 870.1869088 * (day_start - e_to_j/173) + pha - B);
-
- var Red_Spot = 104.0; // Red Spot's current longitude in degrees
-
- var t_h = 0;
- var t_m = 0;
- var diff = proper_ang(Red_Spot - System_II);
- var rs_time = new Array(3);
- for (i=0; i<3; i++)
- {
- trans = diff / 870.1869 * 24.0;
- t_h = floor(trans);
- t_m = floor(60.0 * (trans - t_h) + 0.5);
- if (t_m > 59) t_m = 59;
- if (t_m < 10) t_m = "0" + t_m;
- if (t_h < 10) t_h = "0" + t_h;
- rs_time[i] = t_h + ":" + t_m + " UT";
- diff += 360.0;
- }
- document.redspot.rs_transit1.value = rs_time[0];
- document.redspot.rs_transit2.value = rs_time[1];
- document.redspot.rs_transit3.value = rs_time[2];
- if (t_h > 23) document.redspot.rs_transit3.value = ".........";
- }
- }